package com.zp.self.module.level_4_算法练习.数据结构.String;

import java.util.HashMap;
import java.util.Map;

/**
 * @author By ZengPeng
 */
public class 力扣_290_单词规律 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_290_单词规律().wordPattern("abba","dog cat cat dog"));
        System.out.println(new 力扣_290_单词规律().wordPattern("abba","dog cat cat fish"));
        System.out.println(new 力扣_290_单词规律().wordPattern("aaaa","dog cat cat dog"));
        System.out.println(new 力扣_290_单词规律().wordPattern("abba","dog dog dog dog"));
    }

    /**
     * 题目：给定一种规律 pattern和一个字符串str，判断 str 是否遵循相同的规律。
     * 这里的遵循指完全匹配，例如，pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。
     *
     *示例1:
     * 输入: pattern = "abba", str = "dog cat cat dog"
     * 输出: true
     *
     * 示例 2:
     * 输入:pattern = "abba", str = "dog cat cat fish"
     * 输出: false
     *
     * 分析：
     *      1. 直接map 存储 键值对<a,dog>。
     *
     * 边界值 & 注意点：
     *      1.key对应的值必须唯一，vaule也是一样必须唯一
     *          a.key 是否存在？
     *                  存在：值与String是否相等
     *                  不存在：判断value是否已经存在 ，存在返回false
     **/
    public boolean wordPattern(String pattern, String s) {
        String[] s1 = s.split(" ");
        if(pattern.length()!=s1.length) return  false;
        Map<Character,String> map = new HashMap<>();
        for (int i = 0; i < s1.length; i++) {
            String s2 = s1[i];
            char c = pattern.charAt(i);
            if(map.containsKey(c)){
                if(!map.get(c).equals(s2) )return false;
            }else{
                if(map.containsValue(s2)) return false;
                map.put(c,s2);
            }
        }
        return true;

    }
}
